리눅스 서버 취약점 진단
리눅스 서버 취약점 진단
root 계정 원격 접속 제한
1. 원격 터미널 서비스를 사용하는 경우
1) 서버 관리를 위해 권한이 있는 사용자의 호스트에서 원격 서비스를 통한 장애 관리 용도로 활용
2) Telnet / SSH / FTP 등을 이용
3) 원격서비스 서버 <-> 관한을 가진 원격의 호스트 PC(클라이언트)
2. root 계정 원격 접속 제한 설정
1) telnet: securetty의 pts 설정 제거
2) ssh: sshd_conf의 PermitRootLogin no 설정 필요
3. 일반권한의 계정으로 로그인 한 후 필요한 경우 su 사용
root 계정 su 제한
1. su 명령어 파일의 소유자.그룹 그리고 권한을 통해서 제한
1) /bin/su
$cd /bin/
$ls -al |grep su
소유자: root 그룹명: root 권한: 4755
*SETUID: 파일 실행 시 해당 파일의 소유자 권한을 빌려서 실행(rwsrwxrwx)(4000)
*SETGID: 파일 실행 시 해당 파일의 그룹 권한을 빌려서 실행(rwxrwsrwx)(2000)
*Stickybit: 파일 또는 디렉토리의 권한이 rwx인데 삭제만은 소유자의 권한만 가능하도록 함(rwxrwxrwt)
(1000)
2) 일반적으로 SU 명령어를 사용할 계정은 wheel 그룹에 추가함
$cd /etc/
$cat group |grep wheel
$usermod -G [그룹명] [계정명]
$usermod -G wheel kisec
$cat group |grep wheel
3) wheel 그룹에 포함된 계정만 SU를 사용할 수 있도록 권한편집
$cd /bin/
$ls -al |grep su
$chown root.wheel su
$chmod 4750 su
$ls -al |grep su
4) SU 명령어 사용 제한 테스트
$useradd test1
$passwd test1
패스워드는 1234로 계정만들기
putty -> Telnet -> login: kisec passwd: kisec1234 -> su root -> passwd: kisec1234 -> whoami
-> su test1 -> su root -> 허가 거부
접속 IP 및 포트 제한
1. 원격 터미널 서비스 사용 시 Telnet, FTP 이러한 취약한 서비스를 사용하는 경우
1) 취약점: 평문통신
2) 위협: 네트워크 스니핑(MITM)
- ARP Spoofing, Switch Jamming, IP Spoofing 등
2. 공격자가 스니핑을 통해 무단접근할 수 있는 가능성
3. 서버IP / 클라이언트IP / 인증정보 탈취를 통한 무단접근 및 권한획득
4. 원격터미널 서비스 호스트 IP 기반의 접근제어 필요!
/etc/passwd 파일 소유자 및 권한설정
1. passwd: 계정의 상세정보가 저장
2. 파일 소유자가 root가 아니거나 일반 사용자에게 과도한 권한이 설정되어 있는 경우
3. 중요정보 유출 및 권한획득이 쉽게 발생할 수 있는 보안약점
4. 소유자는 반드시 root이여야 하고, 접근 권한 644이하 운영
/etc/shadow 파일 소유자 및 권한설정
1. shadow: 계정 및 패스워드 정보가 저장
2. 파일 소유자가 root가 아니거나 일반 사용자에게 과도한 권한이 설정되어 있는 경우
3. 패스워드 크랙을 통한 관한 획득이 발생할 수 있는 보안약점
4. 소유자는 반드시 root이여야 하고, 접근 권한 400이하 운영
/etc/hosts 파일 소유자 및 권한설정
1. hosts
1) 도메인(호스트명) 이름에 대응하는 IP 주소가 저장된 파일
2) DNS(Domain Name Server) 주소정보를 제공받지 않고도 목적지를 찾게해 주는 파일
3) e.g www.naver.com -> hosts 파일(O) -> 목적지
4) e.g www.naver.com -> hosts 파일(X) -> DNS(O) -> 목적지
5) 유닉스: /etc/hosts
6) 윈도우: %systemroot%\System32\drivers\etc\hosts
7) hosts파일의 소유자 또는 과도한 권한으로 인해 타 사용자가 hosts 파일을 변조할 수 있는 취약점
8) hosts파일의 변조를 통한 악성서버 유도(파밍사이트 또는 악성코드 감염)
/etc/(x)inetd.conf 파일 소유자 및 권한설정
1. (x)indetd.conf
1) 슈퍼데몬 설정파일
2) 슈퍼데몬 관련 데몬 즉, 서비스들을 동작시키거나 중단시킬 수 있는 설정파일
3) 과도한 권한으로 인해 공격자가 의도적으로 취약한 서비스를 동작시키거나 필요 서비스를 중단!
2. 소유자는 반드시 root이여야 하고, 접근 권한 600이하 운영
/etc/(r)syslog.conf 파일 소유자 및 권한설정
1. (r)syslog.conf
1) 로그의 유형: 부팅로그, 메일로그, 커널로그, 스케줄러(cron)로그, 보안로그 등
2) 로그의 수준: information -> debug ----> warning -> critical
3) 로그의 위치: 각 유형의 해당하는 수준의 로그를 어디에 기록할 것인가 저장 위치
2. 소유자가 root가 아니거나 과도한 권한일 경우 로그정책에 문제가 생겨 감사추적이 어려울 수 있음
3. 소유자는 반드시 root이여야 하고, 접근 권한 644이하 운영
/etc/services 파일 소유자 및 권한설정
1. services
1) 서비스 관리를 위해 사용되는 파일
2) 설치되어 있는 서비스의 기본 포트 정보를 확인
3) 실행 또는 운영하고 있는 서비스의 포트를 임의로 변경하였을 경우 기존 서비스가 제한될 수 있음
2. 소유자는 반드시 root이여하고, 접근 권한은 644이하 운영
SUID, SGID, Stickybit 설정 및 권한설정
1. SUID(Set User-ID): 설정된 파일 실행 시 일시적으로 파일의 소유자 권한을 얻게됨(04000)
2. SGID(Set Group-ID): 설정된 파일 실행 시 일시적으로 파일의 그룹의 권한을 얻게됨(02000)
3. Stickybit: Other에게 rwx 권한이 부여되어 있을 때 소유자가 아니면 삭제못함(01000)
서비스 관리
1. 필요한 서비스 인지 불필요한 서비스 인지를 주기적으로 확인
2. 불필요한 서비스의 경우 중지해야 함(용도가 변경 또는 기능이 같은 서비스가 두개 이상이거나)
3. 필요한 서비스의 경우 반드시 접근제어 필요!
r 계열 서비스 비활성화
1. rsh, rexec, rlogin 등의 서비스를 말함
2. 편의성만을 고려한 원격 터미널 서비스
3. 인증없이 관리자 권한으로 원격 서비스 가능
4. 모든 호스트를 신뢰할 수 있도록 설정 가능
5. r 계열 서비스의 경우 인증없이 그리고 모든 호스트 신뢰로 사용하는 경우 무단접근이 손쉽게 발생!
6. 서비스 비활성화 권고
hosts.equiv 사용금지
1. r 계열 서비스 설정파일
2. [계정명] [신뢰할호스트주소]
+ 192.168.0.100 => 192.168.0.100 호스트에 대한 모든 계정을 신뢰
+ + => 모든 호스트의 모든 계정을 신뢰
kisec + => kisec 계정에 대한 모든 호스트 신뢰
3. 설정파일의 설정 값에 '+' 이와같은 설정이 존재하면 취약하다고 판단함
숨겨진 파일 및 디렉토리 검색 및 제거
1. 악성코드 특징
1) 자신을 찾지 못하게 만든다.
- 숨김파일로 가장(속성)
- 시스템 중요파일로 가장(속성)
- 정상적인 시스템 파일 이름으로 가장(속성)
- Anti-Virus 우회(중단 또는 패킹)
- 시작 서비스 등록
- 예약된 작업에 등록
2. 숨김파일 및 디렉토리 검색
1) 파일: $find / -type f -name ".*"
2) 디렉토리: $find / -type d -name ".*"
FTP 서비스 비활성화
1. 네트워크를 이용한 파일전송 프로토콜
2. FTP의 경우 평문통신 취약점이 있으므로 비활성화 권고
3. 필요한 경우 FTPS 그리고 접근제어
Anonymous FTP 비활성화
1. Anonymous FTP 사용하는 경우(편의성)
1) 모든 계정에 대한 신뢰
2) 인증없이 FTP 사용가능
2. 따라서 Anonymous FTP 사용하지 않을 것을 권고
1) FTP 사용가능 계정 지정
2) 각 계정별 rwx 권한 차등있게 부여해서 관리
cron 파일 소유자 및 권한 설정
1. /etc/cron.deny
=> 소유자 root 권한 640 이하
2. /etc/cron.allow
=> 소유자 root 권한 640 이하
3. 비인가자가 cron.deny / cron.allow 파일에 접근할 수 없도록 설정되어 있는 점검 목적
자세한 내용은 아래의 글 참고